下面是由社区开发者—王方浩提供的文章,本文主要分析 自动驾驶规划控制。
自动驾驶的规划和控制紧密联系在一起。在自动驾驶汽车行驶之前,先是由规划模块规划出一条具体的线路,然后交给控制模块去执行,控制汽车行驶。规划模块的职责是规划出一条避开障碍物并且符合汽车动力学模型的路线,而控制模块需要保证汽车一丝不苟的按照规划的轨迹来行驶。有点类似于大脑下发命令让手去拿东西,至于如何拿,是手自己完成的。
实际上自动驾驶的规划可以分为3个部分,首先是导航规划,即规划出一条跨度很大的线路,也可以叫做导航线路。比如你需要从机场回家,打开地图,搜索“机场”到“家”,还有35公里,地图上就会规划出几条自驾的线路,这些线路就是我们所说的导航规划。到你真正上路了,又需要根据当前是否有车做出避让,需要考虑红绿灯,什么时候加速,什么时候减速。这些时候导航规划就不够用了,你需要根据当前的实际情况,规划出一条短期的线路。这和人开车是一样的道理,你首先导航好具体的线路,然后根据当前的路况来开车,直达目的地。所以上述的过程可以分为如何决策,以及如何根据当前决策的结果规划一条短期的线路,这个线路在Apollo中往往是100-200米,而且这条线路会每隔0.1秒动态调整,因为汽车在行驶,其他的车也在行驶,所以之前规划的线路,可能并不适合以后。这里就涉及到决策和路径规划。导航规划比较成熟,目前的地图都已经支持的非常好了,主要原理实际上就是从地图中找到2个点之间的最短路径。比较传统的算法是[Dijkstra算法](Dijkstra's Algorithm),由于A*算法比Dijkstra算法更节省查找时间,所以目前主要采用的算法是[A*算法](A* Search Algorithm),当然如果作为一个可用的系统,肯定是需要做很多优化的,比如拓扑地图的生成,以及实时地图维护(路网更新),能够在有限的范围形成一个最优解,这个系统就已经做的很不错了。
决策目前是以应用深度学习来解决的,基于深度学习来训练车辆避开障碍物[Learning-to-Drive](Self-Driving Cars in The Browser),还有MIT基于深度学习来解决交通拥堵问题[Deeptraffic](MIT 6.S094: Deep Learning for Self-Driving Cars),目前深度学习还没有完全用于自动驾驶控制是因为深度学习是一个黑盒的系统,也就是说没法解释其中的原理,如果出现交通事故,你没法知道车辆为什么会失控。所以主流的方式还是通过[有限状态机](Finite-State Machine)来实现控制决策,如果遇到之前没有遇到的情况,你只需要增加一条规则进去就可以了。
Stanford参加DARPA挑战赛决策部分的有限状态机
这样的好处也显而易见,可以很快就让车辆遵守相应的规则,坏处就是规则是有限的,不可能覆盖到所有的场景,如果直接用数据驱动去解决问题,你不一定会解决这个问题,但是当你知道每个问题的规则之后,再用数据驱动去解决这个问题,用来增加解决问题的鲁棒性。比如你现在需要识别手写数字,如果你用规则去实现也可以识别,但是如果字写的不太好,规则可能就识别不出来了。如果你事先知道要识别数字这个问题,然后训练深度学习模型去识别数字,那么在数字写的不太好的情况下,你也可以识别出来,这样就增加了系统的鲁棒性。所以说深度学习是规则的子集,只有把规则做好了,深度学习的模型才能更加有用。当然规则还可以用来快速打补丁,发现一个场景没考虑到,可以快速的上线并且解决问题。
最后是短期的路径规划,短期路径规划实际上需要考虑的是物体的位置加上时间维度,这里主要涉及路径的查找,在保证车避开障碍物的同时,找出一条最短路径,并且基于汽车动力学的原因,规划出来线路的导数也必须是连续的(这块后面有机会在详细看下)。关于这一块的理论可以详细参考下Apollo的教学视频,学习之后再展开描述。
上面就是规划模块所做的事情,生成好具体路径之后,就会交给控制模块,控制模块需要按照规划好的线路去执行,目前有2种实现,一种是[PID控制](PID Controller - Wikipedia),PID是控制学中很常见的方式,比如电机的控制,简单来说,就是根据当前的误差(汽车预期的位置和实际的位置之差)来进行调节,如果向左偏,就把方向盘往右打一点,如果向右偏,就把方向盘往左打一点。PID模型比较简单,由于PID模型对反馈速度的要求很高,而汽车传动的模型相对没那么快,比如刹车,汽车不是立即就刹停,所以就要求能够用模型来描述刹车的过程,这里采用了[MPC控制](Model Predictive Control),即基于模型的控制方法。好处是可以通过模型来描述汽车的运动轨迹,坏处是运算量太大,不一定能够算出固定解。
上面就是对规划和控制模块的大概介绍,规划是先进行导航规划,然后决策,最后生成短期路径;而控制模块是根据上述的轨迹,用PID方法或者MPC方法去控制汽车按照规划的路径行驶,通过不断重复上面的步骤,直到终点。
https://zhuanlan.zhihu.com/p/58557096以上是"自动驾驶规划控制"的全部内容,更多话题讨论、技术交流可以扫描下方二维码添加『Apollo小哥哥』为好友,进开发者交流群。
©️著作权归作者所有,如需转载,请注明出处,否则将追究法律责任。